package com.bestcem.xm.om.dao.mapper;

import com.bestcem.xm.om.controller.param.MessageParam;
import com.bestcem.xm.om.controller.param.NoticeInfoParam;
import com.bestcem.xm.om.entity.EmailRecord;
import org.apache.ibatis.annotations.Mapper;

import java.time.LocalDateTime;
import java.util.List;

/**
 * (DsOmEmailRecord)表数据库访问层
 *
 * @author xuan.yang
 * @since 2022-01-14 14:30:52
 */
@Mapper
public interface EmailRecordMapper {

    /**
     * 根据id查询
     *
     * @param id
     * @return com.bestcem.xm.om.entity.mongo.MailRecord
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/12/4 11:44
     */
    EmailRecord findById(String id);

    /**
     * 根据前端传来的参数查询对应的邮件明细
     * @param param
     * @param ids
     * @return
     */
    List<EmailRecord> listByMessageParam(MessageParam param, List<String> ids);

    /**
     * 根据id列表查询
     *
     * @param ids id列表
     * @return
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/11/19 17:36
     */
    List<EmailRecord> listByIds(List<String> ids);

    /**
     * 根据条件查询该批次的数量
     *
     * @param noticeInfoParam
     * @return 根据条件查询到的数目
     * @author xuan.yang@idiaoyan.com
     * @date 2021/11/22 14:50
     */
    Long countByCondition(NoticeInfoParam noticeInfoParam);

    /**
     * 根据条件查询数目，page为空返回查询所有的列表
     * 用于导出的时候使用
     *
     * @param noticeInfoParam
     * @return
     * @author xuan.yang@idiaoyan.com
     * @date 2021/11/22 14:51
     */
    List<EmailRecord> listRecordsByCondition(NoticeInfoParam noticeInfoParam);

    /**
     * 插入的行数
     *
     * @param emailRecordList
     * @return
     * @author xuan.yang@idiaoyan.com
     * @date 2021/11/24 11:07
     */
    Integer batchSave(List<EmailRecord> emailRecordList);

    /**
     * 根据批次id获得记录列表
     *
     * @param batchId
     * @return
     * @author xuan.yang@idiaoyan.com
     * @date 2021/11/26 14:44
     */
    List<EmailRecord> listByBatchId(String batchId);

    /**
     * 根据批次id删除
     *
     * @param batchId
     * @return
     * @author xuan.yang@idiaoyan.com
     * @date 2021/11/30 15:30
     */
    Long removeByBatchId(String batchId);

    /**
     * 更新方法
     *
     * @param emailRecord
     * @return void
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/11/29 17:38
     */
    void update(EmailRecord emailRecord);

    /**
     * 根据id列表和batchid，更新发送状态
     * @param batchId
     * @param idList
     * @param status
     * @param updateTime
     */
    void updateSendStatus(String batchId, List<String> idList, Integer status, LocalDateTime updateTime);

    /**
     * 获取有链接点击时间，没有登录时间的记录
     *
     * @param from
     * @return java.util.List<com.bestcem.xm.om.entity.mongo.EmailRecord>
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/12/8 18:20
     */
    List<EmailRecord> listByVistedTime(LocalDateTime from);

    /**
     * 保存单条记录
     *
     * @param emailRecord
     * @return void
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/12/15 1:15
     */
    void insert(EmailRecord emailRecord);

    /**
     * 统计批次中链接被访问的数据
     * @param batchId
     * @return
     */
    Long countLinkVisited(String batchId);

    /**
     * 统计批次中发送成功数量
     *
     * @param batchId
     * @return java.lang.Long
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/12/20 10:51
     */
    Long countSuccess(String batchId);

    /**
     * 统计批次中发送数量
     *
     * @param batchId
     * @param status
     * @return java.lang.Long
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/12/22 11:47
     */
    Long countByStatus(String batchId, Integer status);

    /**
     * 根据参数统计数量
     *
     * @param param
     * @param ids   batchid列表
     * @return
     */
    Integer countByMessageParam(MessageParam param, List<String> ids);
}

